// 野指针 : 1、指向了一个不属于当前程序的空间就是野指针

//int main()
//{
//	int a = 10;
//	int* pa;
//	// printf("%p\n", pa);       // 使用了未初始化的局部变量
//
//}

//int main()
//{
//	int arr[3] = { 1,2,3 };
//	int* parr = arr;
//	printf("%d\n", *(arr + 3));    // 越界访问
//
//	return 0;
//}

//#include<stdlib.h>
//int main()
//{
//	int* p = (int * )malloc(sizeof(int) * 4);
//	*p = 1, * (p + 1) = 2; *(p + 2) = 3, * (p + 3) = 4;
//	for (int i = 0; i < 4; i++)
//		printf("%d ", *(p + i));
//	free(p);   // 释放
//
//	*p = 10;
//	printf("%d\n", *p);    // 非法访问
//	return 0;
//}

//int main()
//{
// 	int* p = NULL;  
//	*p = 19;     // 写入访问权限冲突
//	printf("%d\n", *p);
//	return 0;
//}

// 如何避免野指针
// 1、定义指针变量立刻初始化，
// 2、指针所指向的空间释放，要及时将指针置空
int * test()
{
    int a = 10;      // 局部变量的作用域和生命周期，都只在当前花括号内
    return *a;
}
int main()
{
    // int a = 10;
    // int *pa = &a;
    int *pa = test();
     pa = NULL;  // 0地址无访问权限
    return 0;
}